//! 将一种类型转换成另一种类型的工具方法
//!

use crate::{ApiError, ApiResult};
use serde::Serialize;
use serde::de::DeserializeOwned;

/// 通过json序列化和反序列化的方式转换
pub fn transform_json<T, S>(source: &T) -> ApiResult<S>
where
    T: Serialize,
    S: DeserializeOwned,
{
    let s = serde_json::to_string(source);
    match s {
        Ok(s) => serde_json::from_str(&s).map_err(|e| ApiError::Biz(e.to_string())),
        Err(e) => Err(ApiError::Biz(e.to_string())),
    }
}
